#include #include #include char * add(const char *, const char *); char * substract(const char * as, const char * bs) { int lena=strlen(as), lenb=strlen(bs), mlen=lena>lenb?lena:lenb; char * tmp=(char *)malloc((mlen+3)*sizeof(char)), * x; char a, b, c, atvitel=0; int i; if ((as[0]=='-')&&(bs[0]!='-')) { /* (-a) - b = -(a + b) */ x=add(as+1, bs);strcpy(tmp, "-"); strcat(tmp, x);return tmp;} if ((as[0]!='-')&&(bs[0]=='-')) return add(as, bs+1); /* a - (-b) = a + b */ if ((as[0]=='-')&&(bs[0]=='-')) { /* (-a) - (-b) = -(a - b) x=substract(as+1, bs+1); strcpy(tmp, "-"); strcat(tmp, x); return tmp; } for (i=0;i1+i)) strcpy(&tmp[i], &tmp[i+1]); return tmp; } char * add(const char * as, const char * bs) { int lena=strlen(as), lenb=strlen(bs), mlen=lena>lenb?lena:lenb; char * tmp=(char *)malloc((mlen+3)*sizeof(char)), * x; char a, b, c, atvitel=0; int i; memset(tmp, 0, mlen+3); if ((as[0]=='-')&&(bs[0]!='-')) return substract(bs, as+1); /* (-a) + b = b - a */ if ((as[0]!='-')&&(bs[0]=='-')) return substract(as, bs+1); /* a + (-b) = a - b */ if ((as[0]=='-')&&(bs[0]=='-')) { /* (-a) + (-b) = -(a + b) */ x=add(as+1, bs+1); strcpy(tmp, "-"); strcat(tmp, x); return tmp; }for (i=0;i1+i)) strcpy(&tmp[i], &tmp[i+1]);return tmp;} int main() { char a[101]="", b[101]="", * c, muvelet=' '; FILE * fin, * fout; fin=fopen("be.txt", "r"); fscanf(fin, "%s\n", a); fscanf(fin, "%c\n", &muvelet); while (muvelet!='=') { fscanf(fin, "%s\n", b); if (muvelet=='+') c=add(a, b); if (muvelet=='-') c=substract(a, b); strcpy(a, c); free(c); fscanf(fin, "%c\n", &muvelet);}fclose(fin);fout=fopen("ki.txt", "w");fprintf(fout, "%s\n", a);fclose(fout); return 0;}